<template>
    <div class="page_root" data-page-name="导入任务" data-page-identification="m_w2o9v3qkiz">
        <a-spin :spinning="pageLoading.loading" :tip="pageLoading.tip">
            <!-- begin vid_33t4g8s0f0 导入成功全局提示_7ftpy2e5sb -->
            <!-- end vid_33t4g8s0f0 导入成功全局提示_7ftpy2e5sb -->
            <!-- begin vid_fb5p0xd1ym 导入失败全局提示_2v1pag55u2 -->
            <!-- end vid_fb5p0xd1ym 导入失败全局提示_2v1pag55u2 -->
            <!-- begin vid_qq05est9hr 跳转 -->
            <a-modal
                class="vid_qq05est9hr"
                v-model:visible="vid_qq05est9hr_props.visible"
                :title="'跳转'"
                :width="340"
                :maskClosable="false"
                :centered="true"
                @cancel="handle_vid_qq05est9hr_cancel"
                @ok="handle_vid_qq05est9hr_ok"
            >
                <!-- begin vid_atbmm7dyk9 如果该页面内容尚未提交，跳转后将不做保留 -->
                <span class="vid_atbmm7dyk9"> 如果该页面内容尚未提交，跳转后将不做保留 </span>
                <!-- end vid_atbmm7dyk9 如果该页面内容尚未提交，跳转后将不做保留 -->
            </a-modal>
            <!-- end vid_qq05est9hr 跳转 -->
            <!-- begin vid_33ylcjuqfr 面包屑_17iwyg2ukk -->
            <a-breadcrumb class="vid_33ylcjuqfr" @click="handle_vid_33ylcjuqfr_click" style="word-break: break-word">
                <a-breadcrumb-item
                    v-for="(item, index) in vid_33ylcjuqfr_props_tabConfig"
                    :key="index"
                    @click="handleBreadcrumbJump(router, item)"
                    href=""
                >
                    <template v-if="vid_33ylcjuqfr_props.rt_showIcon">
                        <span v-if="/^(https?:|mailto:|tel:|data:image)/.test(item.icon)" role="img" class="anticon"
                            ><embed style="width: 1em; height: 1em" :src="item.icon"
                        /></span>
                        <component v-else :is="item.icon" />
                    </template>
                    {{ item.title }}
                </a-breadcrumb-item>
            </a-breadcrumb>
            <!-- end vid_33ylcjuqfr 面包屑_17iwyg2ukk -->
            <!-- begin vid_8okktsxwbg 容器_26mv9uzzni -->
            <al-box class="vid_8okktsxwbg">
                <!-- begin vid_de7p1rg68f 容器_eyypuf0whs -->
                <al-box class="vid_de7p1rg68f">
                    <!-- begin vid_hupxn9ldsd 简单文本_1o9xm0evd2 -->
                    <span class="vid_hupxn9ldsd"> 月度目标： </span>
                    <!-- end vid_hupxn9ldsd 简单文本_1o9xm0evd2 -->
                    <!-- begin vid_4ss029m8zx 简单文本_8n0hditsho -->
                    <span class="vid_4ss029m8zx">
                        {{ renderStringInTemplate(vid_4ss029m8zx_props.rt_text) }}
                    </span>
                    <!-- end vid_4ss029m8zx 简单文本_8n0hditsho -->
                </al-box>
                <!-- end vid_de7p1rg68f 容器_eyypuf0whs -->
                <!-- begin vid_4jqr7he0kn 表单容器_unp0uvyfee -->
                <a-form
                    ref="vid_4jqr7he0kn_ref"
                    class="vid_4jqr7he0kn"
                    :model="j_tuk1ixue0w"
                    :formModel="vid_4jqr7he0kn_props.formModel"
                >
                    <!-- begin vid_ct5y20he71 布局容器_qf1ypbfm2a -->
                    <div :style="{ width: '100%' }">
                        <a-row class="vid_ct5y20he71" :slots="'6:6:6:6'">
                            <a-col :span="6">
                                <!-- begin vid_65f3gj2jkl 表单项容器_65pc9ll1jp -->
                                <a-form-item
                                    name="q_u8urxjx4s3"
                                    :rules="j_tuk1ixue0w_rules[`q_u8urxjx4s3`]"
                                    class="vid_65f3gj2jkl"
                                    :label-col="{ span: 6 }"
                                    :wrapper-col="{ span: 18 }"
                                >
                                    <!-- begin vid_2ktcpg7wp9 下拉复选框_项目代号 -->
                                    <a-select
                                        class="vid_2ktcpg7wp9"
                                        :mode="'multiple'"
                                        :getPopupContainer="node => node.parentNode"
                                        :filterOption="
                                            (input, option) => {
                                                return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
                                            }
                                        "
                                        v-model:value="j_tuk1ixue0w.q_u8urxjx4s3"
                                        :allowClear="true"
                                        :showSearch="true"
                                        :showArrow="true"
                                        :placeholder="'请选择项目代号'"
                                        :selected="vid_2ktcpg7wp9_props.selected"
                                        :options="vid_2ktcpg7wp9_options()"
                                        @focus="handle_vid_2ktcpg7wp9_focus"
                                        @change="handle_vid_2ktcpg7wp9_change"
                                    />
                                    <!-- end vid_2ktcpg7wp9 下拉复选框_项目代号 -->
                                    <template #label>
                                        <!-- begin vid_o0nv68w8p3 选择项目代号 -->
                                        <span class="vid_o0nv68w8p3"> 选择项目代号 </span>
                                        <!-- end vid_o0nv68w8p3 选择项目代号 -->
                                    </template>
                                </a-form-item>
                                <!-- end vid_65f3gj2jkl 表单项容器_65pc9ll1jp -->
                            </a-col>
                            <a-col :span="6">
                                <!-- begin vid_3c3gipiqy1 表单项容器_xkcffhj2kd -->
                                <a-form-item
                                    name="p_eccnatgoe7"
                                    :rules="j_tuk1ixue0w_rules[`p_eccnatgoe7`]"
                                    class="vid_3c3gipiqy1"
                                    :label-col="{ span: 6 }"
                                    :wrapper-col="{ span: 18 }"
                                >
                                    <!-- begin vid_2iq6suae1w 下拉复选框_项目阶段 -->
                                    <a-select
                                        class="vid_2iq6suae1w"
                                        :mode="'multiple'"
                                        :getPopupContainer="node => node.parentNode"
                                        :filterOption="
                                            (input, option) => {
                                                return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
                                            }
                                        "
                                        v-model:value="j_tuk1ixue0w.p_eccnatgoe7"
                                        :allowClear="true"
                                        :showSearch="true"
                                        :showArrow="true"
                                        :placeholder="'请选择项目阶段'"
                                        :selected="vid_2iq6suae1w_props.selected"
                                        :options="vid_2iq6suae1w_options()"
                                        @focus="handle_vid_2iq6suae1w_focus"
                                        @change="handle_vid_2iq6suae1w_change"
                                    />
                                    <!-- end vid_2iq6suae1w 下拉复选框_项目阶段 -->
                                    <template #label>
                                        <!-- begin vid_ka167k1ydg 选择项目阶段 -->
                                        <span class="vid_ka167k1ydg"> 选择项目阶段 </span>
                                        <!-- end vid_ka167k1ydg 选择项目阶段 -->
                                    </template>
                                </a-form-item>
                                <!-- end vid_3c3gipiqy1 表单项容器_xkcffhj2kd -->
                            </a-col>
                            <a-col :span="6">
                                <!-- begin vid_9evrgt6fhr 表单项容器_vjz7oxs0b0 -->
                                <a-form-item
                                    name="t_esvxjvy1oe"
                                    :rules="j_tuk1ixue0w_rules[`t_esvxjvy1oe`]"
                                    class="vid_9evrgt6fhr"
                                    :label-col="{ span: 6 }"
                                    :wrapper-col="{ span: 18 }"
                                >
                                    <!-- begin vid_y09rcm2xso 下拉复选框_参与人 -->
                                    <a-select
                                        class="vid_y09rcm2xso"
                                        :mode="'multiple'"
                                        :getPopupContainer="node => node.parentNode"
                                        :filterOption="
                                            (input, option) => {
                                                return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0
                                            }
                                        "
                                        v-model:value="j_tuk1ixue0w.t_esvxjvy1oe"
                                        :allowClear="true"
                                        :showSearch="true"
                                        :showArrow="true"
                                        :placeholder="'请选择参与人'"
                                        :selected="vid_y09rcm2xso_props.selected"
                                        :options="vid_y09rcm2xso_options()"
                                        @focus="handle_vid_y09rcm2xso_focus"
                                        @change="handle_vid_y09rcm2xso_change"
                                    />
                                    <!-- end vid_y09rcm2xso 下拉复选框_参与人 -->
                                    <template #label>
                                        <!-- begin vid_xpwvi5c6e4 选择参与人 -->
                                        <span class="vid_xpwvi5c6e4"> 选择参与人 </span>
                                        <!-- end vid_xpwvi5c6e4 选择参与人 -->
                                    </template>
                                </a-form-item>
                                <!-- end vid_9evrgt6fhr 表单项容器_vjz7oxs0b0 -->
                            </a-col>
                            <a-col :span="6">
                                <!-- begin vid_b9g45ehy0n 查询任务 -->
                                <a-button
                                    class="
                "
                                    :type="'primary'"
                                    @click="handle_vid_b9g45ehy0n_click"
                                >
                                    查询任务
                                </a-button>
                                <!-- end vid_b9g45ehy0n 查询任务 -->
                            </a-col>
                        </a-row>
                    </div>
                    <!-- end vid_ct5y20he71 布局容器_qf1ypbfm2a -->
                </a-form>
                <!-- end vid_4jqr7he0kn 表单容器_unp0uvyfee -->
                <!-- begin vid_dz21pm3myg 表格_任务表格 -->
                <!-- 表格_任务表格 -->
                <a-table
                    class="vid_dz21pm3myg"
                    :sorter="vid_dz21pm3myg_props.sorter"
                    :editRowSaveLoading="vid_dz21pm3myg_props.editRowSaveLoading"
                    :currentRow="vid_dz21pm3myg_props.currentRow"
                    :selectedRowList="vid_dz21pm3myg_props.selectedRowList"
                    :data-source="vid_dz21pm3myg_options()"
                    @change="handle_vid_dz21pm3myg_change"
                    :columns="vid_dz21pm3myg_columns"
                    :pagination="false"
                    row-key="taskId"
                    @resizeColumn="(w, col) => handleResizeColumn(w, col, 'vid_dz21pm3myg')"
                    :scroll="{ x: 'max-content', scrollToFirstRowOnChange: true }"
                    :row-class-name="(_record, index) => (index % 2 === 1 ? 'table-striped-even' : 'table-striped-odd')"
                    :rowSelection="vid_dz21pm3myg_props.rowSelection"
                >
                    <template #headerCell="{ title, column }">
                        <span :style="textTruncate(column.width)">
                            {{ title }}
                            <template v-if="column.headerComment">
                                <img
                                    v-if="
                                        column.headerCommentConfig.iconType === 'CUSTOM' ||
                                        (column.headerCommentConfig.icon &&
                                            column.headerCommentConfig.icon.indexOf('base64') !== -1)
                                    "
                                    :src="column.headerCommentConfig.icon"
                                    style="width: 14px"
                                    alt="icon"
                                    :title="column.headerCommentConfig.comment"
                                />
                                <component
                                    v-else
                                    :is="column.headerCommentConfig.icon"
                                    :title="column.headerCommentConfig.comment"
                                />
                            </template>
                        </span>
                    </template>
                    <template #bodyCell="{ text, column, record, index }">
                        <!-- 序号列 -->
                        <template v-if="column && column.dataIndex === 'vid_dz21pm3myg_serialNumber'">
                            {{ index + 1 }}
                        </template>
                        <!-- {"type":"value","dataType":"STRING","link":"","value":"项目代号"} 列内容 -->
                        <template v-if="column.dataIndex === 'projectCode' && !column.customRender">
                            <text-table-cell
                                :rowData="record"
                                :conditionValueMap="vid_dz21pm3myg_props.boundaryValueMap"
                                :dataSource="vid_dz21pm3myg_props.contentDataSource[column.dataIndex]"
                                :columnsConfig="column"
                                :value="text"
                            />
                        </template>
                        <!-- {"type":"value","dataType":"STRING","link":"","value":"项目阶段"} 列内容 -->
                        <template v-if="column.dataIndex === 'milepostName' && !column.customRender">
                            <text-table-cell
                                :rowData="record"
                                :conditionValueMap="vid_dz21pm3myg_props.boundaryValueMap"
                                :dataSource="vid_dz21pm3myg_props.contentDataSource[column.dataIndex]"
                                :columnsConfig="column"
                                :value="text"
                            />
                        </template>
                        <!-- {"type":"value","dataType":"STRING","link":"","value":"任务名称"} 列内容 -->
                        <template v-if="column.dataIndex === 'taskName' && !column.customRender">
                            <text-table-cell
                                :rowData="record"
                                :conditionValueMap="vid_dz21pm3myg_props.boundaryValueMap"
                                :dataSource="vid_dz21pm3myg_props.contentDataSource[column.dataIndex]"
                                :columnsConfig="column"
                                :value="text"
                            />
                        </template>
                        <!-- {"type":"value","dataType":"STRING","link":"","value":"任务负责人"} 列内容 -->
                        <template v-if="column.dataIndex === 'taskLeader' && !column.customRender">
                            <text-table-cell
                                :rowData="record"
                                :conditionValueMap="vid_dz21pm3myg_props.boundaryValueMap"
                                :dataSource="vid_dz21pm3myg_props.contentDataSource[column.dataIndex]"
                                :columnsConfig="column"
                                :value="text"
                            />
                        </template>
                        <!-- {"type":"value","dataType":"STRING","link":"","value":"任务参与人"} 列内容 -->
                        <template v-if="column.dataIndex === 'taskParticipants' && !column.customRender">
                            <text-table-cell
                                :rowData="record"
                                :conditionValueMap="vid_dz21pm3myg_props.boundaryValueMap"
                                :dataSource="vid_dz21pm3myg_props.contentDataSource[column.dataIndex]"
                                :columnsConfig="column"
                                :value="text"
                            />
                        </template>
                        <!-- {"type":"value","dataType":"STRING","link":"","value":"任务状态"} 列内容 -->
                        <template v-if="column.dataIndex === 'taskStatus' && !column.customRender">
                            <text-table-cell
                                :rowData="record"
                                :conditionValueMap="vid_dz21pm3myg_props.boundaryValueMap"
                                :dataSource="vid_dz21pm3myg_props.contentDataSource[column.dataIndex]"
                                :columnsConfig="column"
                                :value="text"
                            />
                        </template>
                        <!-- {"type":"value","dataType":"STRING","link":"","value":"taskId"} 列内容 -->
                        <template v-if="column.dataIndex === 'taskId' && !column.customRender">
                            <text-table-cell
                                :rowData="record"
                                :conditionValueMap="vid_dz21pm3myg_props.boundaryValueMap"
                                :dataSource="vid_dz21pm3myg_props.contentDataSource[column.dataIndex]"
                                :columnsConfig="column"
                                :value="text"
                            />
                        </template>
                    </template>
                </a-table>
                <!-- end vid_dz21pm3myg 表格_任务表格 -->
                <!-- begin vid_ie5z927iou 简单文本_全局参数 -->
                <span v-if="false" class="vid_ie5z927iou">
                    {{ renderStringInTemplate(vid_ie5z927iou_props.rt_text) }}
                </span>
                <!-- end vid_ie5z927iou 简单文本_全局参数 -->
                <!-- begin vid_6qt8gdufiq 容器_lskl26k33n -->
                <al-box class="vid_6qt8gdufiq">
                    <!-- begin vid_yurbyksum8 取消 -->
                    <a-button class="vid_yurbyksum8" @click="handle_vid_yurbyksum8_click"> 取消 </a-button>
                    <!-- end vid_yurbyksum8 取消 -->
                    <!-- begin vid_3gjqe6uirl 提交 -->
                    <a-button class="vid_3gjqe6uirl" :type="'primary'" @click="handle_vid_3gjqe6uirl_click">
                        提交
                    </a-button>
                    <!-- end vid_3gjqe6uirl 提交 -->
                </al-box>
                <!-- end vid_6qt8gdufiq 容器_lskl26k33n -->
            </al-box>
            <!-- end vid_8okktsxwbg 容器_26mv9uzzni -->
        </a-spin>
    </div>
</template>
<script setup>
    import {
        h,
        ref,
        reactive,
        toRaw,
        markRaw,
        watch,
        computed,
        onBeforeMount,
        onMounted,
        onBeforeUnmount,
        onUnmounted,
        onActivated,
        onDeactivated
    } from 'vue'
    import { useRoute, useRouter } from 'vue-router'
    const router = useRouter()
    const route = useRoute()
    import { get, post, put, del, request, requestWithHeaders } from '@/utils/http/Axios'
    import {
        cloneDeep,
        isNullOrEmpty,
        isEmptyArr,
        isNullOrUnDef,
        localGet,
        isContained,
        isArray,
        isEmpty,
        merge,
        getDifferenceArray,
        isObject,
        traversalTreeStructure,
        checkCaseCondition,
        renderStringInTemplate,
        handleBreadcrumbJump,
        throttle
    } from '@/utils/index'
    import dayjs from 'dayjs'
    import { getPagePcChartsDataSourceConvert } from '@/utils/chart'
    import { message, notification, Modal } from 'ant-design-vue'
    import { propertyFormatByNumber, propertyFormatByPercentage, propertyFormatByDate } from '@/utils/format'
    /*** PUBLISH_EXEGESIS ***
import UserTableRecords from '@/model/UserTableRecords';
*** PUBLISH_EXEGESIS ***/

    import TextTableCell from '@/components/page/tableCell/text.vue'
    import NumberTableCell from '@/components/page/tableCell/number.vue'
    import ProgressTableCell from '@/components/page/tableCell/progress.vue'
    import OptionsTableCell from '@/components/page/tableCell/options.vue'
    import DatePickerTableCell from '@/components/page/tableCell/datePicker.vue'
    import RangePickerTableCell from '@/components/page/tableCell/rangePicker.vue'
    import RangeNumberTableCell from '@/components/page/tableCell/rangeNumber.vue'
    import BoolTableCell from '@/components/page/tableCell/bool.vue'

    // 获取传入的流程ID
    const props = defineProps({
        processInstanceId: {
            type: String
        }
    })
    const immediateWatch = (source, callback) => {
        watch(source, callback, { deep: true, immediate: true })
    }

    /* -------------------------- 属性定义 -------------------------- */

    const setTimeOutList = []
    const pageLoading = reactive({
        loading: false,
        tip: undefined
    })

    const vid_33t4g8s0f0_props = reactive({
        show: false,
        type: 'success',
        content: '导入成功',
        duration: 3
    })

    const vid_fb5p0xd1ym_props = reactive({
        show: false,
        type: 'error',
        content: undefined,
        duration: 3
    })

    const vid_qq05est9hr_props = reactive({
        visible: false
    })

    const vid_33ylcjuqfr_props = reactive({
        rt_showIcon: false
    })

    const vid_4ss029m8zx_props = reactive({
        rt_text: undefined
    })

    const vid_4jqr7he0kn_props = reactive({
        formModel: { q_u8urxjx4s3: [], p_eccnatgoe7: [], t_esvxjvy1oe: [] }
    })

    const vid_2ktcpg7wp9_props = reactive({
        selected: { option: [], value: [], label: [] },
        value: []
    })

    const vid_2iq6suae1w_props = reactive({
        selected: { option: [], value: [], label: [] },
        value: []
    })

    const vid_y09rcm2xso_props = reactive({
        selected: { option: [], value: [], label: [] },
        value: []
    })

    const vid_dz21pm3myg_props = reactive({
        systemSort: [],
        sorter: {},
        editRowSaveLoading: {},
        currentRow: {
            projectCode: '',
            milepostName: '',
            taskName: '',
            taskLeader: '',
            taskParticipants: '',
            taskStatus: '',
            taskId: ''
        },
        selectedRowList: {
            custom1: [],
            custom2: [],
            custom3: [],
            custom4: [],
            custom5: [],
            custom6: [],
            projectCode: [],
            milepostName: [],
            taskName: [],
            taskLeader: [],
            taskParticipants: [],
            taskStatus: [],
            taskId: []
        },
        totalNumber: '',
        rt_tableConfig: {
            basic: {
                title: '',
                rowKey: 'taskId',
                rowSelection: true,
                showSequenceNumber: false,
                rowEdit: { editText: '编辑', saveText: '保存', cancelText: '取消' }
            },
            style: {
                headerStyle: {
                    lintHeight: 40,
                    borderWidth: 1,
                    borderColor: '#D9D9D9',
                    backgroundColor: '#3875FF',
                    enableTextStyle: true,
                    fontFamily: 'arial, helvetica, "microsoft yahei";',
                    fontSize: 14,
                    textWeight: '600',
                    textColor: '#FFFFFF'
                },
                contentStyle: {
                    lintHeight: 40,
                    borderWidth: 1,
                    borderColor: '#D9D9D9',
                    oddLineBackColor: '#FFFFFF',
                    evenLineBackColor: '#F8FAFC',
                    enableContentStyle: true,
                    fontFamily: 'arial, helvetica, "microsoft yahei";',
                    fontSize: 14,
                    textWeight: '400',
                    textColor: '#262626'
                },
                paginationStyle: { size: 'default', layout: 'bottomRight' }
            },
            layout: { operationColumnFixed: 'default', showHeader: true, sticky: false },
            scroll: { x: 'max-content', y: '', scrollToFirstRowOnChange: true },
            pagination: {
                enable: false,
                sync: true,
                current: 1,
                pageSize: 10,
                showSizeChanger: true,
                pageSizeOptions: '10,20,30,40',
                showTotal: true,
                showQuickJumper: true,
                simple: false,
                hideOnSinglePage: false
            }
        },
        columnList: [
            {
                dataIndex: 'projectCode',
                headerComment: false,
                title: '项目代号',
                groupTitle: '',
                ellipsis: false,
                contentAlign: 'left',
                customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
                rowEdit: false,
                rowEditConditions: [],
                contentType: 'TEXT',
                contentConfig: {
                    format: null,
                    defaultStyle: null,
                    conditionStyle: [],
                    dataSourceConfig: null,
                    boolConfig: 'collection'
                },
                // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
                customCellStyle: { padding: 0 },
                resizable: true
            },
            {
                dataIndex: 'milepostName',
                headerComment: false,
                title: '项目阶段',
                groupTitle: '',
                ellipsis: false,
                contentAlign: 'left',
                customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
                rowEdit: false,
                rowEditConditions: [],
                contentType: 'TEXT',
                contentConfig: {
                    format: null,
                    defaultStyle: null,
                    conditionStyle: [],
                    dataSourceConfig: null,
                    boolConfig: 'collection'
                },
                // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
                customCellStyle: { padding: 0 },
                resizable: true
            },
            {
                dataIndex: 'taskName',
                headerComment: false,
                title: '任务名称',
                groupTitle: '',
                ellipsis: false,
                contentAlign: 'left',
                customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
                rowEdit: false,
                rowEditConditions: [],
                contentType: 'TEXT',
                contentConfig: {
                    format: null,
                    defaultStyle: null,
                    conditionStyle: [],
                    dataSourceConfig: null,
                    boolConfig: 'collection'
                },
                // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
                customCellStyle: { padding: 0 },
                resizable: true
            },
            {
                dataIndex: 'taskLeader',
                headerComment: false,
                title: '任务负责人',
                groupTitle: '',
                ellipsis: false,
                contentAlign: 'left',
                customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
                rowEdit: false,
                rowEditConditions: [],
                contentType: 'TEXT',
                contentConfig: {
                    format: null,
                    defaultStyle: null,
                    conditionStyle: [],
                    dataSourceConfig: null,
                    boolConfig: 'collection'
                },
                // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
                customCellStyle: { padding: 0 },
                resizable: true
            },
            {
                dataIndex: 'taskParticipants',
                headerComment: false,
                title: '任务参与人',
                groupTitle: '',
                ellipsis: false,
                contentAlign: 'left',
                customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
                rowEdit: false,
                rowEditConditions: [],
                contentType: 'TEXT',
                contentConfig: {
                    format: null,
                    defaultStyle: null,
                    conditionStyle: [],
                    dataSourceConfig: null,
                    boolConfig: 'collection'
                },
                // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
                customCellStyle: { padding: 0 },
                resizable: true
            },
            {
                dataIndex: 'taskStatus',
                headerComment: false,
                title: '任务状态',
                groupTitle: '',
                ellipsis: false,
                contentAlign: 'left',
                customHeaderCell: () => ({ style: { 'text-align': 'left' } }),
                rowEdit: false,
                rowEditConditions: [],
                contentType: 'TEXT',
                contentConfig: {
                    format: null,
                    defaultStyle: null,
                    conditionStyle: [],
                    dataSourceConfig: null,
                    boolConfig: 'collection'
                },
                // 使用插槽的列，设置单元格padding为0，padding样式在内容插槽中已加，以便内容插槽设置背景色时可以占满整个单元格；该样式会在计算属性生成列配置时加入customCell
                customCellStyle: { padding: 0 },
                resizable: true
            }
        ],
        // 进行行合并所需的排序规则，必须将其加到排序字段的前面，以实现合并单元格
        rowMergeSort: [],
        // 完整的排序规则：需要将行合并的排序规则和排序字段的排序规则赋给该属性；调接口时会使用其作为排序条件
        systemSort: [],
        // 条件格式需要的边界值映射：key为边界值id，value为边界值数据
        boundaryValueMap: {},
        // 表格单元格内容渲染需要的外部数据源：key为列，value为该列单元格的外部数据源配置
        contentDataSource: {},
        // 选中表格行的配置
        rowSelection: {
            onChange(selectedRowKeys, selectedRows) {
                // 清空之前选中行的信息
                for (const key in vid_dz21pm3myg_props.selectedRowList) {
                    vid_dz21pm3myg_props.selectedRowList[key] = []
                }
                // 将新选中行的信息加入selectedRowList
                selectedRows.forEach(record => {
                    // 将当前行的相关信息加入到选中行数据中
                    for (const key in vid_dz21pm3myg_props.selectedRowList) {
                        vid_dz21pm3myg_props.selectedRowList[key].push(record[key])
                    }
                })
            }
        }
    })

    const vid_ie5z927iou_props = reactive({
        rt_text: undefined
    })
    // ---------------------------- 定义模型数据 ----------------------------

    const j_tuk1ixue0w = reactive({ q_u8urxjx4s3: [], p_eccnatgoe7: [], t_esvxjvy1oe: [] })

    // ============================ 定义模型数据 ============================

    const j_tuk1ixue0w_rules = reactive({
        q_u8urxjx4s3: [{ required: true, message: '请选择项目代号!', trigger: 'blur' }]
    })

    // 处理校验
    const setSubFormName = (parentInfo, name) => {
        return [parentInfo.parents, parentInfo.cycleIndex, name]
    }

    const vid_2ktcpg7wp9_options_raw = ref([])

    const vid_2ktcpg7wp9_options = computed(() => {
        return (dataSource = vid_2ktcpg7wp9_options_raw.value) => {
            return (dataSource || []).map(item => {
                return {
                    ...item,
                    value: item.projectId,
                    label: item.projectCode,
                    disabled: !!item.disabled
                }
            })
        }
    })

    const vid_2iq6suae1w_options_raw = ref([])

    const vid_2iq6suae1w_options = computed(() => {
        return (dataSource = vid_2iq6suae1w_options_raw.value) => {
            return (dataSource || []).map(item => {
                return {
                    ...item,
                    value: item.milepostName,
                    label: item.milepostName,
                    disabled: !!item.disabled
                }
            })
        }
    })

    const vid_y09rcm2xso_options_raw = ref([])

    const vid_y09rcm2xso_options = computed(() => {
        return (dataSource = vid_y09rcm2xso_options_raw.value) => {
            return (dataSource || []).map(item => {
                return {
                    ...item,
                    value: item.name,
                    label: item.name,
                    disabled: !!item.disabled
                }
            })
        }
    })

    const vid_dz21pm3myg_options_raw = ref([])

    const vid_dz21pm3myg_options = computed(() => {
        return () => vid_dz21pm3myg_options_raw.value
    })

    // 图表组件 下拉复选框_项目代号 条件格式数据依赖
    const vid_2ktcpg7wp9_chartConditionDependencyMap = ref({})
    // 图表组件 下拉复选框_项目阶段 条件格式数据依赖
    const vid_2iq6suae1w_chartConditionDependencyMap = ref({})
    // 图表组件 下拉复选框_参与人 条件格式数据依赖
    const vid_y09rcm2xso_chartConditionDependencyMap = ref({})
    // 图表组件 表格_任务表格 条件格式数据依赖
    const vid_dz21pm3myg_chartConditionDependencyMap = ref({})
    /* ========================== 属性定义 ========================== */

    /* -------------------------- 元素数据引用 -------------------------- */
    // 组件 表单容器_unp0uvyfee ref 的引用
    const vid_4jqr7he0kn_ref = ref(null)

    /* ========================== 元素数据引用 ========================== */

    /* -------------------------- 页面数据 -------------------------- */

    // 页面数据 获取平台项目代号下拉框列表
    const dataConnector_conn_cqvqzm51gb_response = ref()
    const dataConnector_conn_cqvqzm51gb = async (additionParams = {}) => {
        const exec = async () => {
            // 获取参数
            const params = {
                projectType: dataConnector_conn_4637s9r69b_response?.value?.data?.projectType,
                projectName: dataConnector_conn_4637s9r69b_response?.value?.data?.projectName
            }

            // 注入附加的参数
            try {
                merge(params, additionParams)
            } catch (error) {
                console.log(error)
            }
            // 判断加载提示

            // 处理URL
            let url = '/ppm/api/v2/built-in-system-ppm/pmgf/get/platformProjectCodes'
            // 替换url中的变量

            // 排除空参数  日期组件重置后的空参数是[null] 或者[undefined]
            Object.keys(params).forEach(key => {
                if (params[key] === null) {
                    delete params[key]
                } else if (Object.prototype.toString.call(params[key]) === '[object Object]') {
                    Object.keys(params[key]).forEach(childKey => {
                        if (
                            params[key][childKey] === null ||
                            (Array.isArray(params[key][childKey]) &&
                                params[key][childKey].length === 1 &&
                                isNullOrUnDef(params[key][childKey]?.[0]))
                        ) {
                            delete params[key][childKey]
                        }
                    })
                }
            })
            return post(url, params)
                .then(async resp => {
                    dataConnector_conn_cqvqzm51gb_response.value = resp

                    return resp
                })
                .catch(async e => {
                    return Promise.reject(e)
                })
                .finally(async () => {})
        }

        return await exec()
    }

    // 页面数据 上传任务
    const dataConnector_conn_jmjp452pbe_response = ref()
    const dataConnector_conn_jmjp452pbe = async (additionParams = {}) => {
        const exec = async () => {
            // 获取参数
            const params = {
                taskIdList: vid_dz21pm3myg_props?.selectedRowList.taskId,
                projectMonthlyGoalManagementId: pageParameter_state.id,
                uploadTaskFormList: null
            }

            // 注入附加的参数
            try {
                merge(params, additionParams)
            } catch (error) {
                console.log(error)
            }
            // 判断加载提示

            // 处理URL
            let url = '/ppm/api/v2/built-in-system-ppm/pmgf/upload/task'
            // 替换url中的变量

            // 排除空参数  日期组件重置后的空参数是[null] 或者[undefined]
            Object.keys(params).forEach(key => {
                if (params[key] === null) {
                    delete params[key]
                } else if (Object.prototype.toString.call(params[key]) === '[object Object]') {
                    Object.keys(params[key]).forEach(childKey => {
                        if (
                            params[key][childKey] === null ||
                            (Array.isArray(params[key][childKey]) &&
                                params[key][childKey].length === 1 &&
                                isNullOrUnDef(params[key][childKey]?.[0]))
                        ) {
                            delete params[key][childKey]
                        }
                    })
                }
            })
            return post(url, params)
                .then(async resp => {
                    dataConnector_conn_jmjp452pbe_response.value = resp

                    return resp
                })
                .catch(async e => {
                    return Promise.reject(e)
                })
                .finally(async () => {})
        }

        return await exec()
    }

    // 页面数据 根据项目代号查询相关任务
    const dataConnector_conn_0kg32sbz53_response = ref()
    const dataConnector_conn_0kg32sbz53 = async (additionParams = {}) => {
        const exec = async () => {
            // 获取参数
            const params = {
                participantNameList: j_tuk1ixue0w.t_esvxjvy1oe,
                milepostNameList: j_tuk1ixue0w.p_eccnatgoe7,
                projectMonthlyGoalManagementId: pageParameter_state.id,
                projectCodeList: j_tuk1ixue0w.q_u8urxjx4s3
            }

            // 注入附加的参数
            try {
                merge(params, additionParams)
            } catch (error) {
                console.log(error)
            }
            // 判断加载提示

            // 处理URL
            let url = '/ppm/api/v2/built-in-system-ppm/pmgf/get/tasksByProjectCode'
            // 替换url中的变量

            // 排除空参数  日期组件重置后的空参数是[null] 或者[undefined]
            Object.keys(params).forEach(key => {
                if (params[key] === null) {
                    delete params[key]
                } else if (Object.prototype.toString.call(params[key]) === '[object Object]') {
                    Object.keys(params[key]).forEach(childKey => {
                        if (
                            params[key][childKey] === null ||
                            (Array.isArray(params[key][childKey]) &&
                                params[key][childKey].length === 1 &&
                                isNullOrUnDef(params[key][childKey]?.[0]))
                        ) {
                            delete params[key][childKey]
                        }
                    })
                }
            })
            return post(url, params)
                .then(async resp => {
                    dataConnector_conn_0kg32sbz53_response.value = resp

                    return resp
                })
                .catch(async e => {
                    return Promise.reject(e)
                })
                .finally(async () => {})
        }

        return await exec()
    }

    // 页面数据 查询关联任务列表
    const dataConnector_conn_4637s9r69b_response = ref()
    const dataConnector_conn_4637s9r69b = async (additionParams = {}) => {
        const exec = async () => {
            // 获取参数
            const params = {
                projectMonthlyGoalManagementId: pageParameter_state.id,
                relatedTaskFormList: null,
                goalWeight: null,
                projectMonthlyGoal: null
            }

            // 注入附加的参数
            try {
                merge(params, additionParams)
            } catch (error) {
                console.log(error)
            }
            // 判断加载提示

            // 处理URL
            let url = '/ppm/api/v2/built-in-system-ppm/pmgf/get/relatedTasks'
            // 替换url中的变量

            // 排除空参数  日期组件重置后的空参数是[null] 或者[undefined]
            Object.keys(params).forEach(key => {
                if (params[key] === null) {
                    delete params[key]
                } else if (Object.prototype.toString.call(params[key]) === '[object Object]') {
                    Object.keys(params[key]).forEach(childKey => {
                        if (
                            params[key][childKey] === null ||
                            (Array.isArray(params[key][childKey]) &&
                                params[key][childKey].length === 1 &&
                                isNullOrUnDef(params[key][childKey]?.[0]))
                        ) {
                            delete params[key][childKey]
                        }
                    })
                }
            })
            return post(url, params)
                .then(async resp => {
                    dataConnector_conn_4637s9r69b_response.value = resp

                    return resp
                })
                .catch(async e => {
                    return Promise.reject(e)
                })
                .finally(async () => {})
        }

        return await exec()
    }

    // 页面数据 导入任务时选择项目阶段
    const dataConnector_conn_grva9vv9an_response = ref()
    const dataConnector_conn_grva9vv9an = async (additionParams = {}) => {
        const exec = async () => {
            // 获取参数
            const params = {
                projectType: dataConnector_conn_4637s9r69b_response?.value?.data?.projectType,
                projectName: dataConnector_conn_4637s9r69b_response?.value?.data?.projectName
            }

            // 注入附加的参数
            try {
                merge(params, additionParams)
            } catch (error) {
                console.log(error)
            }
            // 判断加载提示

            // 处理URL
            let url = '/ppm/api/v2/built-in-system-ppm/pmgf/getProjectPhase'
            // 替换url中的变量

            // 排除空参数  日期组件重置后的空参数是[null] 或者[undefined]
            Object.keys(params).forEach(key => {
                if (params[key] === null) {
                    delete params[key]
                } else if (Object.prototype.toString.call(params[key]) === '[object Object]') {
                    Object.keys(params[key]).forEach(childKey => {
                        if (
                            params[key][childKey] === null ||
                            (Array.isArray(params[key][childKey]) &&
                                params[key][childKey].length === 1 &&
                                isNullOrUnDef(params[key][childKey]?.[0]))
                        ) {
                            delete params[key][childKey]
                        }
                    })
                }
            })
            return post(url, params)
                .then(async resp => {
                    dataConnector_conn_grva9vv9an_response.value = resp

                    return resp
                })
                .catch(async e => {
                    return Promise.reject(e)
                })
                .finally(async () => {})
        }

        return await exec()
    }

    // 页面数据 查询负责人和参与人的下拉框
    const dataConnector_conn_sjdfta10ih_response = ref()
    const dataConnector_conn_sjdfta10ih = async (additionParams = {}) => {
        const exec = async () => {
            // 获取参数
            const params = {}

            // 注入附加的参数
            try {
                merge(params, additionParams)
            } catch (error) {
                console.log(error)
            }
            // 判断加载提示

            // 处理URL
            let url = '/ppm/api/v2/built-in-system-ppm/pmgf/get/allUser'
            // 替换url中的变量

            // 排除空参数  日期组件重置后的空参数是[null] 或者[undefined]
            Object.keys(params).forEach(key => {
                if (params[key] === null) {
                    delete params[key]
                } else if (Object.prototype.toString.call(params[key]) === '[object Object]') {
                    Object.keys(params[key]).forEach(childKey => {
                        if (
                            params[key][childKey] === null ||
                            (Array.isArray(params[key][childKey]) &&
                                params[key][childKey].length === 1 &&
                                isNullOrUnDef(params[key][childKey]?.[0]))
                        ) {
                            delete params[key][childKey]
                        }
                    })
                }
            })
            return get(url, params)
                .then(async resp => {
                    dataConnector_conn_sjdfta10ih_response.value = resp

                    return resp
                })
                .catch(async e => {
                    return Promise.reject(e)
                })
                .finally(async () => {})
        }

        return await exec()
    }

    /* ========================== 页面数据 ========================== */

    /* -------------------------- 响应 -------------------------- */

    // 页面交互 关联任务
    const response_v3ber7klul = async () => {
        const openMode = 'current'
        const query = {
            id: pageParameter_state.id
        }
        const jumpInfo = {
            path: '/app_50000005/page/50001641', // 跳转地址
            query
        }
        const routeUrl = router.resolve(jumpInfo)
        let url = routeUrl.href
        // 判断是否是MicroApp的子应用
        const microAppData = window.__MICRO_APP_ENVIRONMENT__
        if (microAppData) {
            const urlList = []
            Object.keys(jumpInfo.query).forEach(item => {
                const urlItem = item + '=' + jumpInfo.query[item]
                urlList.push(urlItem)
            })
            // 判断要跳转的地址是否是用户自定义输入的
            const customJumpPath = 'PAGE_LIST' === 'CUSTOM_PAGE' ? jumpInfo.query.iframe_url : jumpInfo.path
            // 自定义跳转页面不是其他平台的菜单，则直接使用全路径
            if ('PAGE_LIST' === 'CUSTOM_PAGE' && customJumpPath.indexOf('/allin-app/') === -1) {
                url = jumpInfo.query.iframe_url + '?' + urlList.join('&')
            } else if (customJumpPath.indexOf('/allin-app/') !== -1) {
                // 目标页面是其他平台的菜单
                let jumpPath = customJumpPath.substring(customJumpPath.indexOf('/allin-app/'))
                // 配置有参数，需要加参数添加到路由后面
                if (urlList.length) {
                    // 跳转的路径本身带有参数
                    if (jumpPath.indexOf('?') !== -1) {
                        jumpPath += '&' + urlList.join('&')
                    } else {
                        jumpPath += '?' + urlList.join('&')
                    }
                }
                url = location.origin + jumpPath
            } else {
                // 目标页面就是低代码项目本身的页面
                url = location.origin + '/allin-app' + customJumpPath
            }
        }
        // 新窗口
        if (openMode === 'new') {
            window.open(url, '_blank')
        } else if (openMode === 'iframe') {
            _props.src = url
        } else {
            if (microAppData) {
                window.location.href = url
            } else {
                router.push(jumpInfo)
            }
        }
    }

    // 页面交互 上传任务
    const response_7cznh0xfxq = async () => {
        const branchList = [
            {
                conditionType: 'EQUALS',
                value: 200,
                exec: async () => {
                    vid_33t4g8s0f0_props.show = true
                    await dataConnector_conn_0kg32sbz53()
                }
            },
            {
                conditionType: 'NOT_EQUALS',
                value: 200,
                exec: async () => {
                    vid_fb5p0xd1ym_props.show = true
                }
            }
        ]

        const matchBranch = branchList.find(item =>
            checkCaseCondition(dataConnector_conn_jmjp452pbe_response?.value?.code, item.conditionType, item.value)
        )
        // 匹配到的分支
        if (matchBranch) {
            matchBranch.exec()
            return
        }
        // 默认分支动作
    }

    /* ========================== 响应 ========================== */

    /* -------------------------- 函数 -------------------------- */

    /* ========================== 函数 ========================== */

    /* -------------------------- 页面参数 -------------------------- */

    const pageParameter_state = reactive({
        processInstanceId: props.processInstanceId,
        id: undefined
    })

    /* ========================== 页面参数 ========================== */

    /* -------------------------- 组件事件处理方法 -------------------------- */

    // ---------------------------- 组件数据同步 ----------------------------
    // 处理 导入失败全局提示_2v1pag55u2 的 content 属性关联
    watch(
        () => dataConnector_conn_jmjp452pbe_response?.value?.message,
        () => {
            vid_fb5p0xd1ym_props.content = dataConnector_conn_jmjp452pbe_response?.value?.message
        },
        { deep: true }
    )
    // 处理 简单文本_8n0hditsho 的 rt_text 属性关联
    watch(
        () => dataConnector_conn_4637s9r69b_response?.value?.data?.projectMonthlyGoal,
        () => {
            vid_4ss029m8zx_props.rt_text = dataConnector_conn_4637s9r69b_response?.value?.data?.projectMonthlyGoal
        },
        { deep: true }
    )
    // 处理 下拉复选框_项目代号 的 systemList 属性关联
    watch(
        () => dataConnector_conn_cqvqzm51gb_response?.value?.data?.projectCodeDtoList,
        () => {
            vid_2ktcpg7wp9_options_raw.value = dataConnector_conn_cqvqzm51gb_response?.value?.data?.projectCodeDtoList
        },
        { deep: true }
    )
    // 处理 下拉复选框_项目阶段 的 systemList 属性关联
    watch(
        () => dataConnector_conn_grva9vv9an_response?.value?.data?.dataList,
        () => {
            vid_2iq6suae1w_options_raw.value = dataConnector_conn_grva9vv9an_response?.value?.data?.dataList
        },
        { deep: true }
    )
    // 处理 下拉复选框_参与人 的 systemList 属性关联
    watch(
        () => dataConnector_conn_sjdfta10ih_response?.value?.data?.userDtoList,
        () => {
            vid_y09rcm2xso_options_raw.value = dataConnector_conn_sjdfta10ih_response?.value?.data?.userDtoList
        },
        { deep: true }
    )
    // 处理 表格_任务表格 的 systemList 属性关联
    watch(
        () => dataConnector_conn_0kg32sbz53_response?.value?.data?.tasksByProjectCodeDtoList,
        () => {
            vid_dz21pm3myg_options_raw.value =
                dataConnector_conn_0kg32sbz53_response?.value?.data?.tasksByProjectCodeDtoList
        },
        { deep: true }
    )
    // 处理 简单文本_全局参数 的 rt_text 属性关联
    watch(
        () =>
            dataConnector_conn_4637s9r69b_response?.value?.data?.goalLinkedTasksDtoList?.[0]
                ?.projectMonthlyGoalManagementId,
        () => {
            vid_ie5z927iou_props.rt_text =
                dataConnector_conn_4637s9r69b_response?.value?.data?.goalLinkedTasksDtoList?.[0]?.projectMonthlyGoalManagementId
        },
        { deep: true }
    )
    // ============================ 组件数据同步 ============================

    /**
     * 处理元素 对话框 的 cancel 事件
     */
    let handle_vid_qq05est9hr_cancel = throttle(async (...params) => {
        vid_qq05est9hr_props.visible = false
    }, 500)
    /**
     * 处理元素 对话框 的 ok 事件
     */
    let handle_vid_qq05est9hr_ok = throttle(async (...params) => {
        vid_qq05est9hr_props.visible = false
        response_v3ber7klul()
    }, 500)
    /**
     * 处理元素 面包屑 的 click 事件
     */
    let handle_vid_33ylcjuqfr_click = throttle(async (...params) => {
        response_v3ber7klul()
    }, 500)
    /**
     * 处理元素 下拉复选框 的 focus 事件
     */
    let handle_vid_2ktcpg7wp9_focus = throttle(async (...params) => {
        await dataConnector_conn_cqvqzm51gb()
    }, 500)
    /**
     * 处理元素 下拉复选框 的 change 事件
     */
    let handle_vid_2ktcpg7wp9_change = throttle(async (...params) => {
        const [, option] = params
        if (!option || !Array.isArray(option)) {
            return
        }
        vid_2ktcpg7wp9_props.selected.label = option.map(item => item.label)
        vid_2ktcpg7wp9_props.selected.value = option.map(item => item.value)
        vid_2ktcpg7wp9_props.selected.option = option
    }, 500)
    /**
     * 处理元素 下拉复选框 的 focus 事件
     */
    let handle_vid_2iq6suae1w_focus = throttle(async (...params) => {
        await dataConnector_conn_grva9vv9an()
    }, 500)
    /**
     * 处理元素 下拉复选框 的 change 事件
     */
    let handle_vid_2iq6suae1w_change = throttle(async (...params) => {
        const [, option] = params
        if (!option || !Array.isArray(option)) {
            return
        }
        vid_2iq6suae1w_props.selected.label = option.map(item => item.label)
        vid_2iq6suae1w_props.selected.value = option.map(item => item.value)
        vid_2iq6suae1w_props.selected.option = option
    }, 500)
    /**
     * 处理元素 下拉复选框 的 focus 事件
     */
    let handle_vid_y09rcm2xso_focus = throttle(async (...params) => {
        await dataConnector_conn_sjdfta10ih()
    }, 500)
    /**
     * 处理元素 下拉复选框 的 change 事件
     */
    let handle_vid_y09rcm2xso_change = throttle(async (...params) => {
        const [, option] = params
        if (!option || !Array.isArray(option)) {
            return
        }
        vid_y09rcm2xso_props.selected.label = option.map(item => item.label)
        vid_y09rcm2xso_props.selected.value = option.map(item => item.value)
        vid_y09rcm2xso_props.selected.option = option
    }, 500)
    /**
     * 处理元素 按钮 的 click 事件
     */
    let handle_vid_b9g45ehy0n_click = throttle(async (...params) => {
        await dataConnector_conn_0kg32sbz53()
    }, 500)
    /**
     * 处理元素 表格 的 change 事件
     */
    let handle_vid_dz21pm3myg_change = throttle(async (...params) => {
        // 处理分页器相关数据
        const [pagination, filters, sorter] = params
        const { current, pageSize } = pagination
        vid_dz21pm3myg_props.rt_tableConfig.pagination.current = current
        vid_dz21pm3myg_props.rt_tableConfig.pagination.pageSize = pageSize
        // 处理排序相关数据
        const { field, order } = sorter
        const sorterList = [...vid_dz21pm3myg_props.rowMergeSort]
        let sorterValue = {}
        if (order === 'descend') {
            sorterValue = { order: field, direction: 'DESC' }
        } else if (order === 'ascend') {
            sorterValue = { order: field, direction: 'ASC' }
        }
        sorterList.push(sorterValue)
        vid_dz21pm3myg_props.systemSort = sorterList
        vid_dz21pm3myg_props.sorter = sorterValue
    }, 500)
    /**
     * 处理元素 按钮 的 click 事件
     */
    let handle_vid_yurbyksum8_click = throttle(async (...params) => {
        // 这里组件可能还未初始化， 这里使用可选链的形式进行函数触发
        try {
            await vid_4jqr7he0kn_ref.value?.resetFields()
        } catch (error) {
            console.log(error)
        }
        await dataConnector_conn_0kg32sbz53()
    }, 500)
    /**
     * 处理元素 按钮 的 click 事件
     */
    let handle_vid_3gjqe6uirl_click = throttle(async (...params) => {
        // 这里组件可能还未初始化， 这里使用可选链的形式进行函数触发
        await vid_4jqr7he0kn_ref.value?.validate()
        await dataConnector_conn_jmjp452pbe()
        response_7cznh0xfxq()
    }, 500)
    /* ========================== 组件事件处理方法 ========================== */

    /* -------------------------- 生命周期 -------------------------- */
    onMounted(() => {
        const pageParams = [
            {
                name: 'id',
                dataType: 'STRING',
                dependencies: [
                    {
                        sourceType: 'dataConnector',
                        propertyChain: 'id',
                        dataConnector: {
                            vid: 'conn_4637s9r69b',
                            type: 'request',
                            paramLink: 'projectMonthlyGoalManagementId'
                        }
                    },
                    {
                        sourceType: 'dataConnector',
                        propertyChain: 'id',
                        dataConnector: {
                            vid: 'conn_0kg32sbz53',
                            type: 'request',
                            paramLink: 'projectMonthlyGoalManagementId'
                        }
                    },
                    {
                        sourceType: 'dataConnector',
                        propertyChain: 'id',
                        dataConnector: {
                            vid: 'conn_jmjp452pbe',
                            type: 'request',
                            paramLink: 'projectMonthlyGoalManagementId'
                        }
                    },
                    {
                        sourceType: 'responseTargetPage',
                        propertyChain: 'id',
                        responseTargetPage: { id: 'v3ber7klul', key: 'id' }
                    }
                ]
            }
        ]
        const strategyMap = {
            STRING: (param, paramValue) => {
                pageParameter_state[param.name] = paramValue
            },
            BOOLEAN: (param, paramValue) => {
                if ('true' === (paramValue || '').toLowerCase()) {
                    pageParameter_state[param.name] = true
                } else if ('false' === (paramValue || '').toLowerCase()) {
                    pageParameter_state[param.name] = false
                } else {
                    message.error('参数传入错误！类型不匹配！')
                }
            },
            NUMBER: (param, paramValue) => {
                if (!isNaN(paramValue)) {
                    pageParameter_state[param.name] = Number(paramValue)
                } else {
                    message.error('参数传入错误！类型不匹配！')
                }
            },
            ARRAY: (param, paramValue) => {
                if (isNullOrUnDef(paramValue) || !paramValue || paramValue === 'undefined') {
                    pageParameter_state[param.name] = []
                } else if (paramValue.trim().startsWith('[') && paramValue.trim().endsWith(']')) {
                    try {
                        pageParameter_state[param.name] = JSON.parse(decodeURI(paramValue))
                    } catch (error) {
                        console.error('参数解析失败 ', error)
                        message.error('参数解析失败 ', error)
                    }
                } else {
                    console.error('参数传入错误！类型不匹配！')
                    message.error('参数传入错误！类型不匹配！')
                }
            }
        }
        pageParams.forEach(param => {
            strategyMap[param.dataType](param, route.query[param.name])
        })
        dataConnector_conn_4637s9r69b()
    })

    onUnmounted(() => {
        // 销毁定时器
        setTimeOutList.forEach(({ repeat, timer }) => {
            repeat ? clearInterval(timer) : clearTimeout(timer)
        })
    })

    /* ========================== 生命周期 ========================== */

    /* -------------------------- 数据关联处理 -------------------------- */

    // 处理 导入成功全局提示_7ftpy2e5sb 全局消息
    immediateWatch(
        () => vid_33t4g8s0f0_props.show,
        () => {
            if (vid_33t4g8s0f0_props.show) {
                message[vid_33t4g8s0f0_props.type](vid_33t4g8s0f0_props.content, vid_33t4g8s0f0_props.duration, () => {
                    vid_33t4g8s0f0_props.show = false
                })
            }
        }
    )
    // 处理 导入失败全局提示_2v1pag55u2 全局消息
    immediateWatch(
        () => vid_fb5p0xd1ym_props.show,
        () => {
            if (vid_fb5p0xd1ym_props.show) {
                message[vid_fb5p0xd1ym_props.type](vid_fb5p0xd1ym_props.content, vid_fb5p0xd1ym_props.duration, () => {
                    vid_fb5p0xd1ym_props.show = false
                })
            }
        }
    )

    /* -------------------------- 表单数据同步 -------------------------- */
    /* ========================== 表单数据同步 ========================== */

    /* ========================== 数据关联处理 ========================== */

    /* -------------------------- 不同组件自定义的处理逻辑 -------------------------- */
    const vid_33ylcjuqfr_props_tabConfig = computed(() => {
        const initValue = [
            {
                key: 'tab1',
                title: '项目月度目标管理',
                targetPage: {
                    settingType: 'PAGE_LIST',
                    url: '/app_50000005/page/50001636',
                    customUrl: '',
                    modelId: 50001636
                },
                icon: '',
                parameter: [],
                applicationId: 50000005,
                query: {}
            },
            {
                key: 'tab2',
                title: '关联任务',
                icon: '',
                targetPage: {
                    settingType: 'PAGE_LIST',
                    url: '/app_50000005/page/50001641',
                    customUrl: '',
                    modelId: 50001641
                },
                parameter: [
                    {
                        name: 'id',
                        dataType: 'STRING',
                        dependencies: [
                            {
                                sourceType: 'dataConnector',
                                propertyChain: 'id',
                                dataConnector: {
                                    vid: 'conn_bhznyt7efn',
                                    type: 'request',
                                    paramLink: 'projectMonthlyGoalManagementId'
                                }
                            },
                            {
                                sourceType: 'dataConnector',
                                propertyChain: 'id',
                                dataConnector: {
                                    vid: 'conn_q1hyx7sb9j',
                                    type: 'request',
                                    paramLink: 'projectMonthlyGoalManagementId'
                                }
                            },
                            {
                                sourceType: 'responseTargetPage',
                                propertyChain: 'id',
                                responseTargetPage: { id: 'cwej1o918k', key: 'id' }
                            }
                        ],
                        value: '',
                        type: 'value',
                        bindingValue: { type: 'value', dataType: 'STRING', link: '', value: '' }
                    }
                ],
                applicationId: 50000005,
                query: { id: '' }
            },
            {
                key: 'tab3',
                title: '导入任务',
                icon: '',
                targetPage: {
                    settingType: 'PAGE_LIST',
                    url: '/app_50000005/page/50001759',
                    customUrl: '',
                    modelId: 50001759
                },
                parameter: [
                    {
                        name: 'id',
                        dataType: 'STRING',
                        dependencies: [
                            {
                                sourceType: 'dataConnector',
                                propertyChain: 'id',
                                dataConnector: {
                                    vid: 'conn_4637s9r69b',
                                    type: 'request',
                                    paramLink: 'projectMonthlyGoalManagementId'
                                }
                            },
                            {
                                sourceType: 'dataConnector',
                                propertyChain: 'id',
                                dataConnector: {
                                    vid: 'conn_0kg32sbz53',
                                    type: 'request',
                                    paramLink: 'projectMonthlyGoalManagementId'
                                }
                            },
                            {
                                sourceType: 'dataConnector',
                                propertyChain: 'id',
                                dataConnector: {
                                    vid: 'conn_jmjp452pbe',
                                    type: 'request',
                                    paramLink: 'projectMonthlyGoalManagementId'
                                }
                            },
                            {
                                sourceType: 'responseTargetPage',
                                propertyChain: 'id',
                                responseTargetPage: { id: 'v3ber7klul', key: 'id' }
                            }
                        ],
                        value: '',
                        type: 'value',
                        bindingValue: { type: 'value', dataType: 'STRING', link: '', value: '' }
                    }
                ],
                applicationId: 50000005,
                query: { id: '' }
            }
        ]
        return initValue
    })
    immediateWatch(
        () => j_tuk1ixue0w?.q_u8urxjx4s3,
        () => {
            if (!!handle_vid_2ktcpg7wp9_change) {
                const options = (vid_2ktcpg7wp9_options?.value() || []).find(
                    item => item.value === j_tuk1ixue0w?.q_u8urxjx4s3 || item.label === j_tuk1ixue0w?.q_u8urxjx4s3
                )
                // 重置了表单，这里重置下拉框
                handle_vid_2ktcpg7wp9_change(j_tuk1ixue0w?.q_u8urxjx4s3, { ...options } || {})
            }
        }
    )
    immediateWatch(
        () => j_tuk1ixue0w?.p_eccnatgoe7,
        () => {
            if (!!handle_vid_2iq6suae1w_change) {
                const options = (vid_2iq6suae1w_options?.value() || []).find(
                    item => item.value === j_tuk1ixue0w?.p_eccnatgoe7 || item.label === j_tuk1ixue0w?.p_eccnatgoe7
                )
                // 重置了表单，这里重置下拉框
                handle_vid_2iq6suae1w_change(j_tuk1ixue0w?.p_eccnatgoe7, { ...options } || {})
            }
        }
    )
    immediateWatch(
        () => j_tuk1ixue0w?.t_esvxjvy1oe,
        () => {
            if (!!handle_vid_y09rcm2xso_change) {
                const options = (vid_y09rcm2xso_options?.value() || []).find(
                    item => item.value === j_tuk1ixue0w?.t_esvxjvy1oe || item.label === j_tuk1ixue0w?.t_esvxjvy1oe
                )
                // 重置了表单，这里重置下拉框
                handle_vid_y09rcm2xso_change(j_tuk1ixue0w?.t_esvxjvy1oe, { ...options } || {})
            }
        }
    )
    // 生成表格列：相同分组的数据需要合并单元格
    const vid_dz21pm3myg_columns = computed(() => {
        // 需要合并单元格的列
        const groupKeys = []
        const rawColumnList = [...vid_dz21pm3myg_props.columnList]
        /*** PUBLISH_EXEGESIS ***
// 获取缓存的表格列宽度，处理列宽信息
UserTableRecords.getTableRecords(localGet('al__UID')).then((res) => {
  const columnWidthMap = res['vid_dz21pm3myg'] ?? {};
  rawColumnList.map((column) => {
    if(columnWidthMap[column.dataIndex]) {
      column.width = columnWidthMap[column.dataIndex]
    }
  })
});
*** PUBLISH_EXEGESIS ***/
        // 将表头配置按照groupTitle字段进行分组，以实现多级表头
        const columnList = generatorGroupedColumnList(rawColumnList)

        function formatColumns(columnList) {
            columnList.forEach(item => {
                const { dataIndex, contentAlign, children, customCellStyle } = item
                // 如果当前列是分组列，则递归处理它的子列，当前列本身不作处理
                if (!dataIndex && children && children.length) {
                    formatColumns(children)
                    return
                }

                const groupIndex = groupKeys.findIndex(item => item === dataIndex)
                // 如果当前字段属于分组字段，则给它添加合并单元格的配置，否则直接返回
                if (groupIndex === -1) {
                    item.customCell = (record, index) => {
                        return { style: { 'text-align': contentAlign, ...(customCellStyle || {}) } }
                    }
                } else {
                    item.customCell = (record, index) => {
                        const rowGroupKeys = groupKeys.slice(0, groupIndex + 1)
                        const rowSpanList = generateRowSpanList(
                            vid_dz21pm3myg_options.value(),
                            rowGroupKeys,
                            vid_dz21pm3myg_props.editRecordMap
                        )
                        return {
                            rowSpan: rowSpanList[index],
                            style: { 'text-align': contentAlign, ...(customCellStyle || {}) }
                        }
                    }
                }
            })
        }

        // 格式化column：增加合并单元格的配置，以及自定义样式
        formatColumns(columnList)

        return columnList
    })

    // 表格分页器信息：将总条数信息加到基础分页信息中
    const vid_dz21pm3myg_pagination = computed(() => {
        const { totalNumber, rt_tableConfig } = vid_dz21pm3myg_props
        const {
            enable = true,
            current = 1,
            pageSize = 10,
            showSizeChanger = false,
            pageSizeOptions = '10,20,30,40',
            showTotal = false,
            showQuickJumper = false,
            simple = false,
            hideOnSinglePage = false
        } = rt_tableConfig.pagination ?? {}
        const { size = 'default', layout = 'bottomRight' } = rt_tableConfig?.style?.paginationStyle || {}
        let info = {}
        if (enable) {
            info = {
                total: totalNumber || 0,
                pageSize,
                size,
                simple,
                current,
                showSizeChanger,
                pageSizeOptions: pageSizeOptions.split(','),
                showQuickJumper,
                hideOnSinglePage,
                position: [layout]
            }
            if (showTotal) {
                info.showTotal = (total, range) => `共${total}个项目，第${current}/${Math.ceil(total / pageSize)}页`
            }
            return info
        }
        return false
    })

    // 补充一个watch，用于监听删除最后一页最后一条数据的情况，然后重新加载数据
    watch(
        () => dataConnector_conn_0kg32sbz53_response?.value?.data?.tasksByProjectCodeDtoList,
        newValue => {
            const current = vid_dz21pm3myg_props.rt_tableConfig.pagination.current
            if (!newValue?.length && current > 1) {
                vid_dz21pm3myg_props.rt_tableConfig.pagination.current = current - 1
                dataConnector_conn_0kg32sbz53()
            }
        }
    )
    /**
     * 生成分组字段合并单元格的配置：返回值为一个数字数组，数组里面每一项即为该字段当前行的rowSpan配置
     * @param {Array} 表格中的数据
     * @param {Array} 当前分组字段的列表，注：为了保证优先级低的字段合并后是优先级高的字段合并后的子集，需要把比该字段优先级高的分组字段按顺序放在该字段前面；例如：所有分组字段列表为['grade', 'age', 'score']，要生成age字段的合并单元格配置，则该参数需要传['grade', 'age']
     * @returns {Array} 该字段合并单元格的rowSpan配置，例：[1, 1, 2, 0, 1]
     */
    function generateRowSpanList(dataSource, groupKeys, editRecordMap) {
        if (!dataSource || !dataSource.length) {
            return []
        }

        const rowSpanList = []

        // 判断单元格是否需要合并的临时值：使用表格数据最后一行进行初始化（表格数据的遍历是倒序进行的）
        let tempValue = getGroupValue(dataSource[dataSource.length - 1], groupKeys)
        // 记录需要合并单元格的数量
        let tempValueCount = 0

        // 倒序遍历数组，以保证使用最前面一条数据合并单元格
        for (let index = dataSource.length - 1; index >= 0; index--) {
            rowSpanList[index] = 0
            const groupValue = getGroupValue(dataSource[index], groupKeys)
            // 如果当前行的分组数据跟上一行一致，则将标记数量加一；否则将标记数量的当前值赋给上一条数据，并重置临时值和标记数量
            if (editRecordMap && editRecordMap[index]) {
                //如果当前行是编辑行
                rowSpanList[index + 1] = tempValueCount
                tempValue = ''
                tempValueCount = 1
            } else if (groupValue === tempValue) {
                tempValueCount++
            } else {
                rowSpanList[index + 1] = tempValueCount
                tempValue = groupValue
                tempValueCount = 1
            }

            // 遍历到最后一行，将当前的标记数量赋给当前行
            if (index === 0) {
                rowSpanList[index] = tempValueCount
            }
        }

        return rowSpanList
    }

    /**
     * 根据分组字段列表生成当前数据行的分组值
     * @param {Object} 当前数据行
     * @param {Array} 分组字段列表
     * @returns {String} 拼装的当前数据行的分组值，例：record为{ age: 7, grade: '一年级', name: '小赵' }，groupKeys为['grade', 'age']，则拼装后的返回值为'一年级__$__7'
     */
    function getGroupValue(record, groupKeys) {
        const groupValueList = []
        groupKeys.forEach(groupKey => {
            groupValueList.push(`${record[groupKey]}`)
        })

        return groupValueList.join('__$__')
    }

    // 生成过长省略的样式
    function textTruncate(width) {
        if (!width) {
            return {}
        }
        return {
            whiteSpace: 'nowrap',
            overflow: 'hidden',
            textOverflow: 'ellipsis',
            display: 'block',
            width: typeof width === 'number' ? width + 'px' : width
        }
    }

    /**
     * 将列表数据转换成树状数据
     * @param {Array} 原始的列表数据
     * @param {String|Number} 列表数据的唯一key
     * @param {String|Number} 列表数据转成树时的父级id
     */
    function convertListToTree(list, key, parentKey) {
        const clonedList = cloneDeep(list || [])

        // 遍历列表数据，生成树节点的map：key为列表数据的唯一key，value为列表当前行的数据
        const treeNodeMap = {}
        clonedList.forEach(item => {
            treeNodeMap[item[key]] = item
        })

        const treeDataList = []
        clonedList.forEach(item => {
            // 如果当前行数据的父级id不在树节点的map中，则当前数据为根节点数据，将其加入最终树形数据的列表；否则将其放入其父节点数据的children中
            if (!treeNodeMap[item[parentKey]]) {
                treeDataList.push(item)
            } else {
                if (!treeNodeMap[item[parentKey]].children) {
                    treeNodeMap[item[parentKey]].children = []
                }
                treeNodeMap[item[parentKey]].children.push(item)
            }
        })

        return treeDataList
    }

    /**
     * 将原始的列配置列表，按照groupTitle的值进行分组，以实现多级表头
     * @param rawColumnList 原始的列配置列表
     */
    function generatorGroupedColumnList(rawColumnList) {
        // 生成分组表头的map：key为分组表头的名称，value为该分组下所有的column配置代码的字符串列表
        const groupColumnMap = {}
        rawColumnList.forEach(columnItem => {
            if (!columnItem.groupTitle) {
                return
            }

            if (!groupColumnMap[columnItem.groupTitle]) {
                groupColumnMap[columnItem.groupTitle] = []
            }
            groupColumnMap[columnItem.groupTitle].push(columnItem)
        })

        const columnList = []
        rawColumnList.forEach(columnItem => {
            const { groupTitle } = columnItem

            // 如果不存在分组字段，则使用原始的列配置
            if (!groupTitle) {
                columnList.push(columnItem)
                return
            }

            // 如果存在分组表头，且该分组还没加入到列配置列表，则将其加入列配置列表，并将其从groupColumnMap中删除
            if (groupColumnMap[groupTitle]) {
                columnList.push({
                    title: groupTitle,
                    children: groupColumnMap[groupTitle]
                })

                delete groupColumnMap[groupTitle]
            }
        })

        return columnList
    }
    /**
     * 表格列宽伸缩处理，使用indexedDB缓存伸缩后的列宽度
     */
    const handleResizeColumn = (w, col, vid) => {
        col.width = w
        /*** PUBLISH_EXEGESIS ***
UserTableRecords.saveTableRecords(col, localGet('al__UID'), vid)
*** PUBLISH_EXEGESIS ***/
    }
    /* ========================== 不同组件自定义的处理逻辑 ========================== */

    // ================================定制化逻辑========================================
</script>
<style lang="less" scoped>
    .page_root {
        width: 100%;
        height: 100%;
        overflow: auto;
    }
    .page_root :deep(.@{ant-prefix}-spin-nested-loading),
    .page_root :deep(.@{ant-prefix}-spin-container) {
        height: 100%;
    }
    .table-moreBtn_down {
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
        width: 100px;
    }

    .table-moreBtn_menu :deep(.table-moreBtn_menu-item):hover {
        background: #ebf1ff;
    }

    /*  表格树结构样式处理，展开按钮层级增加*/
    :deep(.@{ant-prefix}-table-row-expand-icon) {
        z-index: 1;
    }
    /*  表格树结构 由于每个表格项采用自定义组件，使用绝对定位布局，开启树结构导致显示异常，暂时使用层级定位位置 */
    :deep(.@{ant-prefix}-table-row-level-1 .ant-table-cell-with-append .cell-wrapper-left) {
        left: 15px !important;
        width: calc(100% - 15px);
    }
    :deep(.@{ant-prefix}-table-row-level-2 .ant-table-cell-with-append .cell-wrapper-left) {
        left: 30px !important;
        width: calc(100% - 30px);
    }
    :deep(.@{ant-prefix}-table-row-level-3 .ant-table-cell-with-append .cell-wrapper-left) {
        left: 45px !important;
        width: calc(100% - 45px);
    }
    :deep(.@{ant-prefix}-table-row-level-4 .ant-table-cell-with-append .cell-wrapper-left) {
        left: 60px !important;
        width: calc(100% - 60px);
    }

    /* 穿梭框改变默认样式，为根据组件样式控制左右栏宽度。 */
    :deep(.@{ant-prefix}-transfer-list) {
        height: 100%;
        width: 50%;
    }
    .vid_33ylcjuqfr :deep(a) {
        color: undefined;
    }
    :deep(.vid_33ylcjuqfr.@{ant-prefix}-breadcrumb) > span:last-child a {
        color: undefined;
        opacity: 0.75;
    }
    .vid_8okktsxwbg {
        height: 800px;
        overflow-x: auto;
        overflow-y: auto;
        display: block;
        margin-top: 8px;
        padding-top: 16px;
        padding-right: 24px;
        padding-bottom: 24px;
        padding-left: 24px;
        background-color: rgba(255, 255, 255, 1);
    }
    .vid_de7p1rg68f {
        margin-top: 16px;
        margin-bottom: 16px;
        padding-top: 8px;
        padding-right: 8px;
        padding-bottom: 8px;
        padding-left: 8px;
        background-color: rgba(230, 236, 250, 1);
    }
    .vid_4jqr7he0kn {
        width: 100%;
    }
    .vid_ct5y20he71 {
        padding-bottom: 16px;
    }
    .vid_65f3gj2jkl {
        margin-bottom: 0px;
    }
    .vid_2ktcpg7wp9 :deep(span) {
        cursor: undefined;
    }
    .vid_2ktcpg7wp9 {
        width: 100%;
    }
    .vid_3c3gipiqy1 {
        margin-bottom: 0px;
    }
    .vid_2iq6suae1w :deep(span) {
        cursor: undefined;
    }
    .vid_2iq6suae1w {
        width: 100%;
    }
    .vid_9evrgt6fhr {
        margin-bottom: 0px;
    }
    .vid_y09rcm2xso :deep(span) {
        cursor: undefined;
    }
    .vid_y09rcm2xso {
        width: 100%;
    }
    .vid_b9g45ehy0n {
        margin-left: 16px;
    }
    .vid_dz21pm3myg :deep(.@{ant-prefix}-table-thead) > tr {
        height: 40px;
    }
    .vid_dz21pm3myg :deep(.@{ant-prefix}-table-thead) > tr > th {
        background: #3875ff;
        font-size: 14px;
        font-family: arial, helvetica, 'microsoft yahei';
        font-weight: 600;
        color: #ffffff;
        border-bottom: 1px solid #d9d9d9;
        padding: 0 24px;
    }
    .vid_dz21pm3myg
        :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered)
        > .@{ant-prefix}-table-container
        > .@{ant-prefix}-table-content
        > table
        > thead
        > tr:not(:last-child)
        > th {
        border-bottom: 1px solid #d9d9d9;
    }
    .vid_dz21pm3myg
        :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered)
        > .@{ant-prefix}-table-container
        > .@{ant-prefix}-table-content
        > table
        > thead
        > tr
        > th {
        border-right: 1px solid #d9d9d9;
    }
    .vid_dz21pm3myg :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered) > .@{ant-prefix}-table-container {
        border-left: none;
    }
    .vid_dz21pm3myg
        :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered)
        > .@{ant-prefix}-table-container
        > .@{ant-prefix}-table-content
        > table
        > thead
        > tr
        > th:first-child {
        border-left: 1px solid #d9d9d9;
    }
    .vid_dz21pm3myg
        :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered)
        > .@{ant-prefix}-table-container
        > .@{ant-prefix}-table-content
        > table {
        border-top: 1px solid #d9d9d9;
    }
    .vid_dz21pm3myg
        :deep(.@{ant-prefix}-table-thead)
        > tr
        > th:not(:last-child):not(.@{ant-prefix}-table-selection-column):not(
            .@{ant-prefix}-table-row-expand-icon-cell
        ):not([colspan])::before {
        background: #d9d9d9;
        width: 1px;
    }
    .vid_dz21pm3myg :deep(.@{ant-prefix}-table-cell-scrollbar) {
        box-shadow: none;
    }
    .vid_dz21pm3myg :deep(.@{ant-prefix}-table-tbody) tr {
        height: 40px;
    }
    .vid_dz21pm3myg :deep(.@{ant-prefix}-table-tbody) tr > td {
        font-size: 14px;
        font-family: arial, helvetica, 'microsoft yahei';
        font-weight: 400;
        color: #262626;
        border-bottom: 1px solid #d9d9d9;
        padding: 0 24px;
        word-break: break-all;
    }
    .vid_dz21pm3myg :deep(.@{ant-prefix}-table-empty .@{ant-prefix}-table-tbody tr > td) {
        padding: 0;
    }
    .vid_dz21pm3myg :deep(.@{ant-prefix}-table-tbody) tr > td .@{ant-prefix}-btn {
        padding: 0 30px 0 0;
    }
    .vid_dz21pm3myg :deep(.@{ant-prefix}-table-tbody) tr > td .@{ant-prefix}-btn:last-child {
        padding: 0;
    }
    .vid_dz21pm3myg :deep(.table-striped-odd) td {
        background-color: #ffffff;
    }
    .vid_dz21pm3myg :deep(.table-striped-even) td {
        background-color: #f8fafc;
    }
    .vid_dz21pm3myg
        :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered)
        > .@{ant-prefix}-table-container
        > .@{ant-prefix}-table-content
        > table
        > tbody
        > tr
        > td {
        border-right: 1px solid #d9d9d9;
    }
    .vid_dz21pm3myg
        :deep(.@{ant-prefix}-table.@{ant-prefix}-table-bordered)
        > .@{ant-prefix}-table-container
        > .@{ant-prefix}-table-content
        > table
        > tbody
        > tr
        > td:first-child {
        border-left: 1px solid #d9d9d9;
    }
    .vid_dz21pm3myg {
        width: 100%;
    }
    .vid_6qt8gdufiq {
        width: 100%;
        display: flex;
        align-items: center;
        justify-content: center;
        flex-wrap: undefined;
        padding-top: 16px;
        padding-bottom: 16px;
        background-color: rgba(255, 255, 255, 1);
        border-top-style: solid;
        border-top-width: 1px;
        border-top-color: #ebebeb;
        position: absolute;
        bottom: 1px;
    }
    .vid_3gjqe6uirl {
        margin-left: 8px;
    }
</style>
